{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exploratory data analysis on unlabeled data\n",
    "We don't have labeled data yet, but we can still examine the data to see if there is something that stands out. \n",
    "\n",
    "## Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For this chapter, we will be reading data from a SQLite database:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source_ip</th>\n",
       "      <th>username</th>\n",
       "      <th>success</th>\n",
       "      <th>failure_reason</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>datetime</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-01-01 00:06:19.353126</th>\n",
       "      <td>223.178.55.3</td>\n",
       "      <td>djones</td>\n",
       "      <td>1</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-01 00:09:07.147971</th>\n",
       "      <td>223.178.55.3</td>\n",
       "      <td>djones</td>\n",
       "      <td>1</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-01 01:08:08.610041</th>\n",
       "      <td>6.252.142.27</td>\n",
       "      <td>asmith</td>\n",
       "      <td>1</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-01 02:37:50.329298</th>\n",
       "      <td>124.178.25.98</td>\n",
       "      <td>akim</td>\n",
       "      <td>1</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-01 02:45:20.382080</th>\n",
       "      <td>98.43.141.103</td>\n",
       "      <td>akim</td>\n",
       "      <td>1</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                source_ip username  success failure_reason\n",
       "datetime                                                                  \n",
       "2018-01-01 00:06:19.353126   223.178.55.3   djones        1           None\n",
       "2018-01-01 00:09:07.147971   223.178.55.3   djones        1           None\n",
       "2018-01-01 01:08:08.610041   6.252.142.27   asmith        1           None\n",
       "2018-01-01 02:37:50.329298  124.178.25.98     akim        1           None\n",
       "2018-01-01 02:45:20.382080  98.43.141.103     akim        1           None"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sqlite3\n",
    "\n",
    "with sqlite3.connect('logs/logs.db') as conn:\n",
    "    logs_2018 = pd.read_sql(\n",
    "        \"\"\"\n",
    "        SELECT * \n",
    "        FROM logs \n",
    "        WHERE datetime BETWEEN \"2018-01-01\" AND \"2019-01-01\";\n",
    "        \"\"\", \n",
    "        conn, parse_dates=['datetime'], index_col='datetime'\n",
    "    )\n",
    "logs_2018.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## EDA\n",
    "The `success` column is now an integer because SQLite doesn't have Booleans:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "source_ip         object\n",
       "username          object\n",
       "success            int64\n",
       "failure_reason    object\n",
       "dtype: object"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "logs_2018.dtypes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are working with data for all of 2018, so it's important to keep an eye on memory usage:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 43283 entries, 2018-01-01 00:06:19.353126 to 2018-12-31 23:24:52.807237\n",
      "Data columns (total 4 columns):\n",
      "source_ip         43283 non-null object\n",
      "username          43283 non-null object\n",
      "success           43283 non-null int64\n",
      "failure_reason    19127 non-null object\n",
      "dtypes: int64(1), object(3)\n",
      "memory usage: 1.2+ MB\n"
     ]
    }
   ],
   "source": [
    "logs_2018.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The most common failure reason is providing the wrong username, which suggests that the majority of the failed attempts are from hackers. We can also see that the unique usernames tried (3,351) is well over the amount of users in our user base (133), indicating some suspicious activity. The most frequent IP address made 248 attempts, but since that isn't even one per day (remember we are looking at the full year of 2018), we can't make any assumptions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source_ip</th>\n",
       "      <th>username</th>\n",
       "      <th>success</th>\n",
       "      <th>failure_reason</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>43283</td>\n",
       "      <td>43283</td>\n",
       "      <td>43283.000000</td>\n",
       "      <td>19127</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unique</th>\n",
       "      <td>11559</td>\n",
       "      <td>3351</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>top</th>\n",
       "      <td>78.174.30.56</td>\n",
       "      <td>kim</td>\n",
       "      <td>NaN</td>\n",
       "      <td>error_wrong_username</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>freq</th>\n",
       "      <td>248</td>\n",
       "      <td>352</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.558094</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.496619</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           source_ip username       success        failure_reason\n",
       "count          43283    43283  43283.000000                 19127\n",
       "unique         11559     3351           NaN                     2\n",
       "top     78.174.30.56      kim           NaN  error_wrong_username\n",
       "freq             248      352           NaN                 11815\n",
       "mean             NaN      NaN      0.558094                   NaN\n",
       "std              NaN      NaN      0.496619                   NaN\n",
       "min              NaN      NaN      0.000000                   NaN\n",
       "25%              NaN      NaN      0.000000                   NaN\n",
       "50%              NaN      NaN      1.000000                   NaN\n",
       "75%              NaN      NaN      1.000000                   NaN\n",
       "max              NaN      NaN      1.000000                   NaN"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "logs_2018.describe(include='all')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Distinct users per IP address\n",
    "Most IP addresses are associated with a single user, but at least one is associated with many:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    11559.000000\n",
       "mean         1.175275\n",
       "std          2.726389\n",
       "min          1.000000\n",
       "25%          1.000000\n",
       "50%          1.000000\n",
       "75%          1.000000\n",
       "max        135.000000\n",
       "Name: username, dtype: float64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "logs_2018.groupby('source_ip').agg(\n",
    "    dict(username='nunique')\n",
    ").username.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calculate metrics per IP address\n",
    "The top 3 rows of the pivot appear suspicious due to high error rates; however, the other two seem to be valid users, since they have very high success rates:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>failure_reason</th>\n",
       "      <th>attempts</th>\n",
       "      <th>error_wrong_password</th>\n",
       "      <th>error_wrong_username</th>\n",
       "      <th>success</th>\n",
       "      <th>success_rate</th>\n",
       "      <th>error_rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>source_ip</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>78.174.30.56</th>\n",
       "      <td>248</td>\n",
       "      <td>67</td>\n",
       "      <td>141</td>\n",
       "      <td>40</td>\n",
       "      <td>0.161290</td>\n",
       "      <td>0.838710</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>228.144.254.255</th>\n",
       "      <td>243</td>\n",
       "      <td>71</td>\n",
       "      <td>130</td>\n",
       "      <td>42</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.827160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>215.189.60.53</th>\n",
       "      <td>211</td>\n",
       "      <td>75</td>\n",
       "      <td>106</td>\n",
       "      <td>30</td>\n",
       "      <td>0.142180</td>\n",
       "      <td>0.857820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158.11.94.79</th>\n",
       "      <td>210</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>208</td>\n",
       "      <td>0.990476</td>\n",
       "      <td>0.009524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>226.227.77.216</th>\n",
       "      <td>193</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>192</td>\n",
       "      <td>0.994819</td>\n",
       "      <td>0.005181</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "failure_reason   attempts  error_wrong_password  error_wrong_username  \\\n",
       "source_ip                                                               \n",
       "78.174.30.56          248                    67                   141   \n",
       "228.144.254.255       243                    71                   130   \n",
       "215.189.60.53         211                    75                   106   \n",
       "158.11.94.79          210                     2                     0   \n",
       "226.227.77.216        193                     1                     0   \n",
       "\n",
       "failure_reason   success  success_rate  error_rate  \n",
       "source_ip                                           \n",
       "78.174.30.56          40      0.161290    0.838710  \n",
       "228.144.254.255       42      0.172840    0.827160  \n",
       "215.189.60.53         30      0.142180    0.857820  \n",
       "158.11.94.79         208      0.990476    0.009524  \n",
       "226.227.77.216       192      0.994819    0.005181  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pivot = pd.pivot_table(\n",
    "    logs_2018, values='success', index=logs_2018.source_ip, \n",
    "    columns=logs_2018.failure_reason.fillna('success'), \n",
    "    aggfunc='count', fill_value=0\n",
    ")\n",
    "pivot.insert(0, 'attempts', pivot.sum(axis=1))\n",
    "pivot = pivot.sort_values('attempts', ascending=False).assign(\n",
    "    success_rate=lambda x: x.success / x.attempts,\n",
    "    error_rate=lambda x: 1 - x.success_rate\n",
    ")\n",
    "pivot.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visual Anomaly Detection\n",
    "Let's see if something jumps out at us when plotting successes versus attempts by IP address:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x11a56230>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pivot.plot(\n",
    "    kind='scatter', x='attempts', y='success', \n",
    "    title='successes vs. attempts by IP address', alpha=0.25\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can imagine there being a separation boundary between the groups:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x11b31e30>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = pivot.plot(\n",
    "    kind='scatter', x='attempts', y='success', \n",
    "    title='successes vs. attempts by IP address', alpha=0.25\n",
    ")\n",
    "ax.plot([50, 250], [0, 175], 'r--', label='sample boundary')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "More IP addresses are hacker IP addresses because they get a new IP address for each attack, while the valid users stick with the 1-3 they have. This makes the outliers on successes the valid users instead of the hackers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "attempts       AxesSubplot(0.125,0.125;0.352273x0.755)\n",
       "success     AxesSubplot(0.547727,0.125;0.352273x0.755)\n",
       "dtype: object"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x216 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pivot[['attempts', 'success']].plot(\n",
    "    kind='box', subplots=True, figsize=(10, 3),\n",
    "    title='stats per IP address'\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Does looking at this on a minute resolution make anything stand out?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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I+L+iJgXEeeFY94kdaPDDz+ct7/97QwfPpxp06YxZcoUXnjhBUaPHs3EiROZMmUKf/7znxk9ejT//u//DsA3v/lNxo4dy6hRozjttNOAImG022678S//8i+MGDGCiRMncuutt7LXXnsxdOhQZs2aBcDUqVM5+uij2XfffRk6dCgXXnghAFOmTOHXv/41o0eP5jvf+Q5z585l3LhxjB49mlGjRvHwww835gBJUi8xf/58RowYsfr5Oeecw9SpUznvvPMYNmwYo0aN4ogjjgDgueee4+Mf/zhjx45ljz324LrrrgOK3ukPf/jDHHrooey///7cdtttjB8/ng996EPstttuTJw4kcwE4PTTT2fs2LGMGDGCyZMnry4fP348X/jCF3jPe97D7rvvzt13380HP/hBhg4dysknn7y6fZdeeunqOHHcccexcuXK7jpUkqQu+NSnPsUjjzzCYYcdxte//nXe9a53sccee/Cud72Lhx56CIDbbruN97///Wu899hjj+Xqq69e/XyrrbZaXX+fffbhqKOOYuTIIoHWXjxYuXIlxx57LCNGjGDkyJF85zvfqctnrGe3ygzge8DFrQWZ+c+tjyPiW0BtV9KfM3N0O9u5AJgM3AXcCBwI/LwO7ZWkNUyfPp3+/fvzwgsvMHbsWH71q1/xve99j/vuuw8oLkAeeOCB1c9vvvlmHn74YWbNmkVmcthhh3H77bczaNAg5s2bx09+8hOmTZvG2LFjufzyy7njjjuYOXMmZ511Fj/72c8AmDNnDnfddRfPPfcce+yxB4cccghnn30255xzDtdffz0An/nMZ/jc5z7HxIkTeemll7yQkKQGOfvss3n00UfZbLPNeOqppwA488wz2XfffZk+fTpPPfUU48aN473vfS8Ad955J3PmzKF///7cdttt/O53v2Pu3LnsuOOO7LXXXvzmN79h77335oQTTuDUU08F4Oijj+b666/n0EMPBWDTTTfl9ttv59xzz2XChAncc8899O/fnze/+c184QtfYNGiRVx55ZX85je/oV+/fhx//PFcdtllHHPMMY05SOspIqYD7wcWZeaIsuxKYNeyyjbAU5k5OiIGAw8CD5Wv3ZWZnyrf83aKa5MtKK4nPpetGTxJapAf/OAH/O///i+//OUv2XTTTfniF79I3759ufXWWznppJO45ppr1mu7s2bN4oEHHmDIkCE8+OCD7caD4cOH8/jjj/PAA8X4oNb4VbW6JZwy8/byD/8aylFKHwH27WwbEbED8NrMvLN8fjFwOCacJHWT8847j2uvvRaABQsWrHUk0c0338zNN9/MHnvsAcCzzz7Lww8/zKBBgxgyZMjqnobhw4ez3377ERGMHDmS+fPnr97GhAkT2GKLLdhiiy3YZ599mDVrFttss82r9vPOd76TM888k5aWltU925Kk7jdq1CgmTpzI4YcfzuGHHw4UsWDmzJmcc845QHEnpMceewyA973vffTv33/1+8eNG8fAgQMBGD16NPPnz2fvvffml7/8Jd/4xjd4/vnnWbp0KcOHD1+dcDrssMMAGDlyJMOHD2eHHXYAYJdddmHBggXccccd3HPPPYwdOxaAF154ge23374bjkblZmAHtqReYNmyZUyaNImHH36YiODll19e722NGzdu9RS9X/ziF+3Gg0MPPZRHHnmEz3zmMxxyyCHsv//+lXyOtho1cfzdwJOZWXvlNiQifgc8DZycmb8GdgJaauq0lGWSVHe33XYbt956K3feeSdbbrkl48ePZ/ny5Z2+JzM58cQTOe64415VPn/+fDbbbLPVzzfZZJPVzzfZZBNWrFix+rW2M4fbm0l81FFHseeee3LDDTdwwAEH8MMf/pB99+00hy9J2gB9+/Zl1apVq5+3xoMbbriB22+/nZkzZ3LGGWcwd+5cMpNrrrmGXXfd9VXb+O1vf8trXvOaV5XVxoY+ffqwYsUKli9fzvHHH8/s2bPZeeedmTp16qviT238aBtbVqxYQWYyadIkvva1r1V3ABrADmxJvcUpp5zCPvvsw7XXXsv8+fMZP358p/VrY1Jm8tJLL61+rTbOdBYPfv/733PTTTdx/vnnc9VVVzF9+vRqPkyNRt2l7kjgxzXPFwKDMnMP4N+AyyPitUB76zV1OPw1IiZHxOyImL148eJKGyyp91m2bBnbbrstW265JX/84x+56667AOjXr9/qXoett96aZ555ZvV7DjjgAKZPn86zzz4LwOOPP86iRYvWab/XXXcdy5cvZ8mSJdx2222MHTt2jf088sgj7LLLLnz2s5/lsMMOY86cORv6cSVJnXjDG97AokWLWLJkCS+++CLXX389q1atYsGCBeyzzz584xvf4KmnnuLZZ5/lgAMO4Lvf/e7qdZd+97vfrdO+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\n",
      "text/plain": [
       "<Figure size 1440x216 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.ticker import MultipleLocator\n",
    "\n",
    "ax = logs_2018['2018-01'].assign(\n",
    "    failures=lambda x: 1 - x.success\n",
    ").groupby('source_ip').resample('1min').agg(\n",
    "    {'username': 'nunique', 'success':'sum', 'failures': 'sum'}\n",
    ").assign(\n",
    "    attempts=lambda x: x.success + x.failures\n",
    ").dropna().query('attempts > 0').reset_index().plot(\n",
    "    y=['attempts', 'username', 'failures'], kind='hist',\n",
    "    subplots=True, layout=(1, 3), figsize=(20, 3),\n",
    "    title='January 2018 distributions of minutely stats by IP address'\n",
    ")\n",
    "for axes in ax.flatten():\n",
    "    axes.xaxis.set_major_locator(MultipleLocator(1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There seems to be something with the number of usernames with failures per minute that we can use."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'usernames with failures')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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+/1jwNgwhmuB8+NuQuxHcJMgVqO3E3gtbtoPEbx6oYHgvGkBvlGEdRARKRhL/vy8iIiIFJqZPQPc5u5/K3csIiJSm8p+V1BEREREREQKQwU8ERERERGRGqEmmiIiIiIiIjVCNXgiIiIiIiI1QgU8ERERERGRGtGj3AFEMWTIEB89enS5wxARERERESmLadOmrXP3oZnGq4oC3ujRo5k6dWq5wxARERERESkLM1saZTw10RQREREREakRKuCJiIiIiIjUCBXwREREREREaoQKeCIiIiIiIjVCBTwREREREWm3eWczO5tai76ctVsai76MeqQCnoiIiIiItDvqysc5/TfPFHUZ981YwbifP8mUxRuKupx6VLQCnpn1MbMpZjbTzOaa2ZXh8JvNbLGZzQj/xhQrBhERERERyd7KzcWtXZu6ZCMA81dvKepy6lEx34O3CzjN3beZWU/gOTN7JPztO+5+VxGXLSIiIiIiUneKVsBzdwe2hV97hn9erOWJiIiIiIjUu6I+g2dm3c1sBrAWmODuL4U/XW1ms8zsOjPrXcwYRERERESksh3640d593UTyx1GTShqAc/dW919DDACGGdmhwPfB94KHAcMBr6XbFozu9jMpprZ1IaGhmKGKSIiIiIiZeBh+74dTa28vmZb+pElkpL0ounum4BngLPcfZUHdgH/AMalmGa8u49197FDhw4tRZgiIiIiIiJVrZi9aA41s0Hh577AGcB8MxseDjPgg8CcYsUgIiIiIiKVx6zcEdSuYtbgDQeeNrNZwMsEz+A9CPzLzGYDs4EhwM+KGIOIiEhNWb5xB6Mve4hpS/XuKBGpDGOuepzrJrxekmVt2N7E6Mse4qn5ayJPc/APH+GGiQuLGFVlKVoBz91nufvR7n6kux/u7leFw09z9yPCYZ90dzW2FRERiej5N9YB8N+Xl5U5EhGRwKYdzfz+yQUlWdarq4L35v3t2cWRp2lqaeOaR+YXK6SKU5Jn8ERERERERKT4VMATEREREZGycNdrsgtNBTxh1vJNvPu6iWzf1VLuUErilslL+Ortr5Q7DBGRstra2MyZv53I3JWbI41/x8vL+MItU4sclYjka+3WRk779TO8uX5H3vNqbG7lvb9/lrumLWfMVY9zxBWPsbChME9Xpepj5VM3vdTp+9Pz1/KhvzxPW1vqguC9ryznM3+f0v79theX8v/+Na3LeM8uyPzqtW/fOZMbJy3KOF4lUwFPuPaR+by+Zhszlm0qdygl8ZP75/LAzJXlDkNEJC/53vR+adEGFqzdxm8fj9YxwnfvnsUTr0bv1EBEyuO+V1ayaN12/vnCkrzntahhO/NWbeHbd85k045mtja2MH5icQs/zy5Y1+n7pbe/wvQ3N7GtqXNFRHwa+I3/zmTi6x2Ftx/+bw4Pz17dZd7fvWtWxuXfNW05Vz/8apZRVxYV8ERERKqIpbzvLSJS+5QCZqYCnoiIiIiISI3IWMAzs4+Y2e7h5x+a2T1mdkzxQxORSvTvl97koVmryh2GSFk8t2Ad19fRu5SksrS1OVfcPzfpM1BPzFvDzc9H7zZeJIrm1raCzs/dOfHap7ji/rntw66fuIjnEpplpovn+/fOjry8ZO++a21zfvS/OSxdvz3yfKpNlBq8H7n7VjM7CXgPcAvw1+KGJeWgTowkisvvnc1X/j293GGIlMUnb3qJa2vsXUpK+qvHonXbuHnyEr74z66d3Xzhn1O54oF5ZYhKKlUhzu0nkzx363nMed22JlZs2snNk5e0D1u9pZFPJnSskow7THytgaVZdB6T+O47d5izYjO3vriUS/5dux3uRSngtYb/zwH+6u73Ab2KF5KUmqkxs4hI3VHaX7206ySdgp7bRUwoLOq8ixRCLaeBUQp4K8zsBuCjwMNm1jvidCIiIlIkqnkTkXqWT01irYtSUPso8BhwlrtvAgYD3ylqVJLRtKUbeXCWuvoHaGlt47oJr9fNe/xEpM7V8F1nSW7D9ib+9NQCPUohnexoauG6Ca8X/Dm5TTua2j+/vHhDl9+ff2N9e9PNx+au5sVF67uMsyR8TcMba7dx9FWPs7MpaBAY//xofDPNRPfNWMHMJK/vWrO1sf3zi4s2sGrzTlrj3o/32wmv843/zkg539VbGrln+nIgaK7512cW8vDsVTwyO+hbYFGB3vFXbj0yjeDuO8xsLXASsABoCf+nZWZ9gElA73A5d7n7T8xsf+A/BAXF6cCn3L0p9ZwkmQ//dTIA5x65T5kjKb97XlnB759cwPZdLfzw3EPLHY6IiEhBfe/uWUyYt4Y9+gVPyKicJwC/f3IBN0xcxLABffj48aMKNt8f39fRAcoLSQpvKzbt5KJbprLk2nP40q1dXyYOQT51/faO7P2vH3+NH517KB8b/2KkGL72n6CQtuTaczoN/8G9czp9/9Kt0/jiOw9o//6HJzMWUbjlhaUAzF+9hdkrNrcPX3LtObz/T89Hiq/SRelF8yfA94Dvh4N6ArdFmPcu4DR3PwoYA5xlZm8HfgFc5+4HARuBi3IJXAqvWqu6d7UEd652NrdmGFNERBK5qoUqXqyFSnxNhUhjWCvW1JI8/5Prqb2jKf8WUZt3Nnf6XpA8WpL12dbYQlNLbjWYza1dZ7itRlqDRWmieR7wfmA7gLuvBHbPNJEHYvWcPcM/B04D7gqH3wJ8MMuYpcD00lwRkfpTyx0MiEjtUFKVvSgFvCYPbu85gJn1izpzM+tuZjOAtcAEYCGwyd1jxePlwL7ZhSxRbd7R3OU5vcbmVu6etrzi79hOXbKB11ZvLXcYEmf28s3MWt61PbyIlEf8czKFNGv5Jp3rBdSwdRePzV3dadjidduZ/MY6djS1cM/07K/JyzfsZOLrDZHHf3TOKtZv25XVMupdc2sbd0xdRluBa03Xbmlkwryurx6IWZPh92p13ysrmBPXHLJQHLg7fKZOOmR8Bg+4I+xFc5CZfRH4PHBjlJm7eyswxswGAfcCb0s2WrJpzexi4GKAUaMK1664nlxy+3SeXbCOo0YMYuTg3QC45uFXueWFpQzdvTcnHzy0zBGmdv71LwBd216nU9lF1ur3vj89V+4QRARYsznoZOCJV9cWZf6xZ1CySX8ltU/+7SVeW7OV+T89iz49uwNw6q+fAeBjx43kPy8vY59BfXn7AXtmnFesHNjU2sZn/j4l0j7avLOZL982nSNHDOT+S07KeT3qzfhJi/jVY69hwEfGjizYfC8Y/yKL123njavPpkf3rvUs518/mWUbdtZc/md7Uyvn/rHw+YjF67azeF3tvrA8V1E6Wfm1mZ0JbAEOAX7s7hOyWYi7bzKzZ4C3ExQUe4S1eCOApF1Buvt4YDzA2LFjq+HYrTgrN+0EYFdc2+y1W4M7eLXSxhhUdS8i9aWpwD3mSXG9uSF4KXNbklq6NVuCwnqmZ57yaU7bEh4vyzfuzH0mdWj9tqCGPPFZsnzFjodUlm2Ivp8iv0cua/nPV03AyyttAc/MugOPufsZBE0sIzOzoUBzWLjrC5xB0MHK08D5BD1pfga4L5fApfAqvNWmiIgUgZL+6qFMs2SjWjvPS6XW1qeY0j6DFzax3GFmA3OY93DgaTObBbwMTHD3Bwl65Pymmb0B7AnclMO8pYB0wRARqT/qYEsKYdbyTQWv5ZL8FK9mrzxqbX1KIcozeI3AbDObQNiTJoC7X5puInefBRydZPgiYFyWcUoektXMqbZORKQ6KatTndJdd0txTS5W52rv/9PzHLHvQB74qp7vy0amveHuKthIzqIU8B4K/6TKJEsYajmtUKFVROpCLSfkNSjd7so2A5/Lda4UhYTZRegdsdyKtdmKMVvlfyRRlE5WbilFICK5Ul5HRERqmZrTSikVIl8VHLMqeZZLxgKemS0myR5y9wOKEpGUjU5DEZH6k8vd//XbdtGjWzcG7taz8AEV2YpNO9mzX6/2VxZUE93QlHqWa01lPb5GIUoTzbFxn/sAHwEGFyccERERqXTH/uwJoDrflXfitU/xzoOGcOtFx5c7FJGiUtPNQOy9k/UkbS+aAO6+Pu5vhbv/DjitBLFJgSQ7v9XVrIhIdSpYJU4d1wY9u2BdyZeZ7qobNSOeT4ZdV/3cFKuQlGm++Sy31k5t1VxnL0oTzWPivnYjqNHbvWgRScEkOx9qux2/Ll8iUvuU2aku6XZX1F2Zzz7X4ZKbor1CvAgzLnTuR8dM9YvSRPM3cZ9bgCXAR4sSjUgOarvQKiIiItJVRd/sqeTY6kCUXjRPLUUgUn7FekeOiIhULqX81aOiM/QiRaa0KrqUBTwz+2a6Cd39t4UPR4pBLzoXEREpr3Q3UUtxSdZ1PzfF6rMg03y1uyQf6Wrw9JxdlUt6py/JsFK8BLUUdPESkXpQqGbptZHyV75019hsL7+5veg8+2mkmC86T/9+OLPs93PizYNa2+c1tjolkbKA5+5XljIQERERyazWMm8iUlmUxlS/dE00v+vuvzSzP5L8ReeXFjUykYiUEImIiEi9qeRO5io3svqQronmq+H/qbnM2MxGAv8E9gbagPHu/nszuwL4ItAQjnq5uz+cyzIkd8nfjSciIvVGHWxVD93QrB2Z34PnqJjUmdKq6NI10Xwg/H9LjvNuAb7l7tPNbHdgmplNCH+7zt1/neN8JUvxD/IqqRARESmd2HU3edY0+DVqxjWvF50rc5yTgm+2DBmx9E/oZUf7vH5FedH5UOB7wKFAn9hwdz8t3XTuvgpYFX7eamavAvvmFa1kJWrVfa0U+pSOiUg9KFSaXSsdbNWDfPZVJTfjq2TVfH7kG3mlHTPVvC/KpVuEcf5F0Fxzf+BKghedv5zNQsxsNHA08FI46BIzm2VmfzezPbKZl0ginfYiIiJSbyq53FPJsaVTrXEnilLA29PdbwKa3X2iu38eeHvUBZhZf+Bu4OvuvgX4K3AgMIaghu83Kaa72MymmtnUhoaGZKOIiIjUnVrJgIiISHFEKeA1h/9Xmdk5ZnY0MCLKzM2sJ0Hh7l/ufg+Au69x91Z3bwNuBMYlm9bdx7v7WHcfO3To0CiLkywkbZetJo4iIiJFke4xgqiXXxXu64eyZF1pm0SX8Rk84GdmNhD4FvBHYADwjUwTWdBg9ibgVXf/bdzw4eHzeQDnAXOyjlqyEn9RUTtmERGREkpz2S3Fi87bp8190rpW4j5WgnxagToV0D6vX+neg/cLd/8e0NfdNwObgVOzmPeJwKeA2WY2Ixx2OXChmY0hOO6WAF/KJXDJLOqFo1bKfK6kTETqQKFu1NVI0l8X8tpX2tE5qabNllgezDeNqLR8YYWFUxXS1eC918x+CHwfuDPbGbv7cyTfJ3rnnRRUpSVEIiIiIsVWydmfSuuJM6pCvqainNIV8B4F1gH9zGxL3HAD3N0HFDUyEREREZEalPlF56WJQ2pTyk5W3P077j4QeMjdB8T97a7CXXXp9AxeuvFq4p6FiIhkQxnJ4mq/7ibZzu0vQS/FPtB+zkmh902mVkfVWe9VGkqrosvYi6a7f6AUgYiIiEhmapYu2dDxkqMa2G4qENWvKK9JkBpXA2kYoIRMRCQbyvhXD+0rSSexBVa+x0ulHW+VFk81UAFPql61PsgrIiIi9SnTYzFRHpup5IJPJceWTq28TkwFvDql2i4Rkeqkm1oiIpJOxhedm9mJwBXAfuH4sV40DyhuaFIo8XeB0t2YUKFPRKT+qIOt4orVCCTbzpauB5YC017OTaHPj0w3aGqkAqkolFZFl7GAB9wEfAOYBrQWNxwppFqpZo5Kp72I1IM6S9qF/J6V1+GSm2qqKU91gz7XAlE1rbskF6WAt9ndHyl6JFI2VV8QrPLwRUTKQZk4keqWKv9WCWd2YWMo3RpVwrYrhJQFPDM7Jvz4tJn9CrgH2BX73d2nFzk2KSJVc4uIiIiUh150LsWUrgbvNwnfx8Z9duC0wocjxRD1ReciIlL5lI5Xl1glS7IMe6wWtRSZeVeJISelf9G5oYdOJF8pC3jufiqAmR3g7ovifzMzdbBSBbLNBCjtFxGpfIVuVa+0v7ZV/WMYZaLNVoGUVkUW5TUJdyUZdmemicxspJk9bWavmtlcM/taOHywmU0wswXh/z2yDVokGWVSRESkFqmQJumkyv7knC/S4Vb10j2D91bgMGCgmX0o7qcBQJ8I824BvuXu081sd2CamU0APgs86e7XmtllwGXA93JdAclNLTXbrPb4RUTKQWUGkfIpxD3plKdwBZzchbwpUcrVqYBNVxDpnsE7BDgXGAS8L274VuCLmWbs7quAVeHnrWb2KrAv8AHglHC0W4BnUAGvZHQXUEREpHTSXXV1Sa4/GXd5AY+JOSu30NbmdOumA63epHsG7z7gPjM7wd1fyGchZjYaOBp4CRgWFv5w91VmtleKaS4GLgYYNWpUPosXERGpGXq9QXVKV2NTiicM9BRD/Zm5bBN/nbiQr5z6lnKHIiWWronmd939l8DHzezCxN/d/dIoCzCz/sDdwNfdfUvUGiR3Hw+MBxg7dqzSpRxke2dQG1lEpPKpk5X6oxedl16tbLd5K7dkPU2lrruSqujSNdF8Nfw/NdeZm1lPgsLdv9z9nnDwGjMbHtbeDQfW5jp/kXh6t5+IiIjUG92kkUTpmmg+EH58NvE1CVFYUFV3E/Cqu/827qf7gc8A14b/78t23pK/Tp2sVOqtmoj0XKGISPaUcoqUT6b3EkYqtKU4ieMHl+vmdyHTl1KmVbXyHsJ0NXgxN5vZvsDLwCSCAt/sCNOdCHwKmG1mM8JhlxMU7O4ws4uAN4GPZB+2ZKOWeswUERGpJrGbkMky9Olegl5oquXJTaFfEJ/pprTyaVIIGQt47n6ymfUCjiPo/fIhM+vv7oMzTPccqY/T07MNVERERERERNLLWMAzs5OAd4Z/g4AHgWeLHJcUQNadrFT77b0qD19EJIpCN0vX88uVL59drqcYclNN2y3dOZxL1q5SH32p9mxqKUVpojmRoKOVa4CH3b2puCFJKegcERERESmPTPkw3XiRfEQp4O1J8DzdycClZtYGvODuPypqZFIcSW/KVOadmqiqO3oRkTJR4lkSaV90rp1QdzLt8Wwqz1IdPxVRAVfAGEq6PpWw7QogyjN4m8xsETASGAG8A+hZ7MCkcHQXSEREpLzSv+i8+Ndp5QVyU+3NAqs9fslNlGfwFgKvETx3dz3wOTXTrA66MygiUnuUstcj7fVSq+c8VP2uee2I0kTzIHdvK3okUnbVfpOn2uMXEYmi0M2VdIdfpPQynXfZnJf1cg6rFjq6bplGUOGuNlV9j5lxYpmde19ZwQnXPFneYERERERKIMrNnlp40XkpVWvciTIW8KS2JGtyUBEP4xbIqs2N5Q5BRKQq1HMTtFJK+zLzEr7oXCpEhtOuEOdlrZ3btbY+paACXh3QhUNERKS+KS+Qm2rfbNrv9SljAc/MvmZmAyxwk5lNN7N3lyI4yU8t1cyJiEhASXv90fW89Op5m9fzutePf1L8AAAgAElEQVSKKDV4n3f3LcC7gaHA54BrixqVFF2yGzq6yyMiUvmswLkvJf0iZZCpk5XSRFFVlE+NLkoBL3YleS/wD3efSYQbiGb2dzNba2Zz4oZdYWYrzGxG+Pfe3MKWXNXiXZlaXCcREakVqS9SunzVn8K+6DyzcpWJCn0jqlSqNOwuohTwppnZ4wQFvMfMbHcgSs+aNwNnJRl+nbuPCf8ejh6q5CrTyV0jx7KIiGShVjIy1SJdb4ZRM+H59ICtyo/cVGOtUa2d26Vcn2rc38lEeQ/eRcAYYJG77zCzPQmaaabl7pPMbHR+4Uk+auz8FhERai/zJplpl5dePW/zel73WhGlBs+BQ4FLw+/9gD55LPMSM5sVNuHcI4/5iIiIiNSNXJq91UqNRK3J9H66bGpr042r/V+fohTw/gKcAFwYft8K/DnH5f0VOJCgRnAV8JtUI5rZxWY21cymNjQ05Lg4SSnpCa9UQESk0hX87rqSfhGpAkqqootSwDve3b8CNAK4+0agVy4Lc/c17t7q7m3AjcC4NOOOd/ex7j526NChuSxOkqjFane9AFNERCpVe6VbktxprEYun2frIsdR9CVIFJlqYbPZT5XcXLuSY0unWuNOFKWA12xm3QmTJjMbSrROVrows+FxX88D5qQaVwon04WjVg5mERGJTkl/9VEnK6WXqSllJep8bldf/ImUVmUvSicrfwDuBfYys6uB84EfZprIzG4HTgGGmNly4CfAKWY2huBoWwJ8KbewJRKV3EREao/S9rqjXV4GdbzRq/UVB9IhYwHP3f9lZtOA0wkK0R9091cjTHdhksE3ZR+iFEM13pESERGpZ8p4145MlbHZ5NLUkYokilKDB7AGeDYcv6+ZHePu04sXlhRLumuDEggRkcpX6Cy+bvgVV7r9peJa/clURi90Ib6W8naleFa1VmQs4JnZT4HPAgvpuKHgwGnFC0sKqdZPB93QFBGRSleIa3FeGdxazwwUSSWXKSq5k7nKjSy9St6m2YhSg/dR4EB3byp2MFJYsUP03ukrOHrkoJR3hWrlYBYRqQeFuqml5n4iqeVydkx6vYED9+rPvoP6FjyebNTaqa20KntRetGcAwwqdiBSPLe+uJSn5q/tNKyS70iJiIhIB92IrQ6f/vsUzvztxEjjZsqGFSqflstsdLRVvyg1eNcAr5jZHGBXbKC7v79oUUnBbWlsBnSREBERKaV0lQ/ZVkyoJqPy7WhqTft7pj2Yyx7WPXtJFKWAdwvwC2A2Ob7/Tsovyp0gJRAiIpWv0Dfq1KJDpDpVcnm/GDcjSpFWVfI2zUaUAt46d/9D0SMRERERqVHpMqdRM675vehcJflcVPtWU8+T9SlKAW+amV0D3E/nJpp6TUKFi78Lke78rpW7FSIi9aBwnawUZj5SfNpXpVfsbZ6x4JVHuSzvWn4db1UvSgHv6PD/2+OG6TUJVSYxndD9HBERkeqiZ/BEJIqMBTx3P7UUgUhp6NogIiJSOulqU3RJrj8ZC+k5HBRpm/9mPzupAVFq8DCzc4DDgD6xYe5+VbGCksKL0ga7Wptp646miEjuqjTprzrpnoGL+nycnqeSeJWc+6nk2NKp1rgTZXwPnpldD1wAfJVgvT8C7FfkuERERCSJWsmASGmpbJgjbTipQlFedP4Od/80sNHdrwROAEZmmsjM/m5ma8P358WGDTazCWa2IPy/R+6hSybxmYAuz+DFDVAFmIhI9ShYJyuFmY2UgK7TpVfs9wZnfNF5fr2sdMwnh9lU2juTdfxnL0oBb2f4f4eZ7QM0A/tHmO5m4KyEYZcBT7r7QcCT4XcpIZ0kIiIipZP+RefZXZT1SEL1K86LzlXLKJ1FKeA9aGaDgF8B04ElwH8yTeTuk4ANCYM/QPDidML/H4wcqeRH576IiIiISM2L0ovmT8OPd5vZg0Afd9+c4/KGufuqcL6rzGyvHOcjRVCtd4B0P1NEJHfquKM0ivGic3ePXKunvZybit5uEfZ9ueIvRmVzKZKqWqklj9qL5juA0bHxzQx3/2cR48LMLgYuBhg1alQxF1Wz4g/Sai28iYhIZ5X2fIwUn/Z56RX/Ref5/V5MNVLGqWsZC3hmditwIDADaA0HO5BLAW+NmQ0Pa++GA2tTjeju44HxAGPHjlXppMDiC3y6cIiI1J9cM3Gq8ROpbLWWq1OBM3tRavDGAod6YVL0+4HPANeG/+8rwDwlgo69p7NERESkVNJddbO9ItdK87F6lvE95zns4/TNf3VDph5F6WRlDrB3tjM2s9uBF4BDzGy5mV1EULA708wWAGeG30XyouudiIhUunTZ7Nyfwcs9Hql+lZ39qezoUqnOqLuKUoM3BJhnZlOAXbGB7v7+dBO5+4Upfjo9enhSKFGuAbpQiIjUHyX99UE1Obkp1mbL1DeC9lZX6k8iuigFvCuKHYQUR7q7EErnRUSqVK3cYpbotM9Lrp43eT2ve61IW8Azs+7Aj9z9jBLFI0USK9Albc6oM1lEpA7llvjrBmF20j5TpetvHUq/0wvx2EmtPaupzgCzl/YZPHdvBXaY2cASxSMiIiIiSdRaxl0KoxDPd0ptidJEsxGYbWYTgO2xge5+adGikoKr5XbLurMjIiKVLt0zcFGv0F06Wclm+VmMKx0qOf9UyeX9So4trWqNO0GUAt5D4Z9UmXQnV+UmVyIiIhKvRvKcVaXoBZSMLzovX06tagtn0i5jAc/dbzGzvsAod3+tBDFJEbQ/g5dunJJEIiIi+Sh03ktNuMpHLVDqT8b34BV4eZVcA5ktpVXRZXwPnpm9D5gBPBp+H2Nm9xc7sHrzw//N5rkF68qybF1eRETqT6536ZXHEqkwCSWfWsvXqUYxe1FedH4FMA7YBODuM4D9ixhTXbrtxTf55E0vFW3+uiCLiIiUT7rah6jN8RLH0rvtRCSZKAW8FnffnDBMKYpUDN3ZERERSU9lwdwU70Xn+f0O0Zr4lmu/V2vWrFrjThSlk5U5ZvZxoLuZHQRcCkwublhSCJ1O/MQzXCm9iIhIVdDrEUqvnre5ng2tflFq8L4KHAbsAm4HtgBfL2ZQUnix4lzanjVV6BMRqXiFzngq5S+utO85Vz667mTa5fVcsMxEaVV0UXrR3AH8APiBmXUH+rl7Yz4LNbMlwFaglaAJ6Nh85if5UWIiIlJ/ck35dTNQpLIknpGWpgFXNVIuNXtRetH8t5kNMLN+wFzgNTP7TgGWfaq7j1HhrjRq4QQXERGpRdFfdJ7bdJI7bWOpRlGaaB7q7luADwIPA6OATxU1KimMOnnRue7siIhILdN1rvZkuvEe5cZ8sRpgFWK+1do4rFZatUUp4PU0s54EBbz73L2Z/MsHDjxuZtPM7OI85yURxJrU6MFZEREplMfmrmZRw7Zyh1HR0j6DV7owpELoRedSClF60bwBWALMBCaZ2X4EHa3k40R3X2lmewETzGy+u0+KHyEs+F0MMGrUqDwXJyIiIknl0Yb/S7dOA2DJtecUKhoRkaT0/G90GWvw3P0P7r6vu7/XA0uBU/NZqLuvDP+vBe4leJF64jjj3X2su48dOnRoPosT0le56g6iiEj1KFSanWtTJGWxcpM2bxpxo3Z90Xmu0UgtSTwOaqSVYbtaaTZZShlr8Mzsxyl+uiqXBYadtXRz963h53fnOi8RqL2ETERERCpD8V50nn7GUZpWRsn+lO9F59WZOauVPGWUZ/C2x/21AmcDo/NY5jDgOTObCUwBHnL3R/OYX8Vpa3Mem7u67FXJ8cdoPb3nvNzbXUREpJBqJdNZTep5m89YtqncIUieorwH7zfx383s18D9uS7Q3RcBR+U6fTX410tL+dF9c/nV+UfykbEjyx1OJ/WcYImIiJRaupoMXZPrT6aarUo4Juav3lruECRPUWrwEu0GHFDoQGrJ6i3Be+BXb87rffAFFaVOq1YqvmplPURESkFJpkh1S9ecs5bO71pal2KL8gzebDq2aXdgKHpmLq1u4e2XajkQK+FukYiIRFOoNDvX2egmWm7SZ8KjbdTERxDUBX71ynge5bFrq/X5t1Rqa21KI8prEs6N+9wCrHH3liLFUxNivf20VdBVsMtFoYJiy59OfRERESm8Si5EV/IN+kqOLZ0qDbuLKM/gLS1FILUkdnC0lTlNSHZy1cqBm07lJsUiIlJv0r/oPNpVuR6u3ZWmWLVgmQs+BV6uMkV1KZdn8CSD9iaaNVVLJiIiIiJS+0bvuVu5Q8iLCnhF0C28+VJt5btKboaQDRWsRUSiU5JZGum2c677QPtOoH6Og1Ku57579C3dwopABbwi6NatEp/BS/ge91lNP0REqkfBOlnJcT61cjNQJJKivei8eIuNP7dr4nwtQ0a1grLwOVEBr4jK/gxekjPCqvWp1zRqcJVEpMKppYBEle4SFfX6VYvX7kpXrE2eabbZLLeSj4vKjSy9St6m2VABrwg6XpNQORmASoql2OpnTUVEREREOlMBrwiq9Rk8EREREakdyovWJxXwcrS1sZlNO5qS/har3W0rdxvNOFFO8FpJBGplPUSkctVSOpNtC49aWvdSSrfZom5SbfvakamZdzb7un4Oi/pZ03xFedG5JPH5m1+mR7du3H7x2zsN/+/Lb/Lzh+cDqZ/Be2r+Gj5/81QA3nvE3vzlE8e2/zb6socAmPSdUxkVsYvW0Zc9xEUn7c8Fx43k3ddN4pbPj+NdBw/tNM41j8xnS2Nz+/crH5jH507cH0je3vjoqx5n445g/Jd/cAbTlm7gy7dN7xLXj++bwz9fCF6V+MAlJ3HEiIGd5vPonNV8+bZpTPzOKey3Zz8AzvjtRHbsamHy90/vNO5375rJHVOX83+nHNhle+w7qC8rNu1kybXnZNwe67fv4oRrnuKH57yNL7zzAADunLqM79w1iyk/OD3ttKMve4gLx43kmg8dycdvfJHJC9cDMOfK99CrezcO/uEjfOOMg/naGQdljCM+/phHvvZO3jZ8QMrxr3pgHn9/fjFmcNJbhvDsgnW8+9Bh7Gxu5dkF6zqt/5J12znl189ww6eO5T2H7d1lmf1792DOle/pNP/xkxby84fnM/fK99Cvdw/O+t0k5q/eCsAXTtqfR+aspnePbjz17VMyrtv37prFf6cu6zRsxo/PZMxVE4L4rj2H0Zc9xLlHDufBWasA+PPHj+GcI4fzy0fn85dnFgJw1IiBzFy+GYD5Pz2LPj27d5rnzqZW3vbjRwH47DtGc8X7D+uyXaMcFzH3TF/ON++YCdC+HRJ99fZXeGDmyqzmm2jNlkaO//mT7d/HjBzE/75yIjOWbeKDf36eO798AseNHsylt7/C/TNXMnT33uzZrxePfv3kTvNZtmEH7/zl0wA8/e1T2H9IPz56wwvMWLaJ1392NgA/fXAeNz23mCXXntPpuBjUtycXjH8R6NhGjc2tvPVHwfb81pkH89XTD2qfZvynjuXdccdSvJnLNvGBPz/PHV86gXH7D24fnrgvenQzWsLE76KT9udH5x6a1XZ7adF6Lhj/YtL0JGb7rhYO+8ljALzzoOA8STRij74s37iTjxw7gl995Kj24Q1bd3Hc1U/wiw8fwQXHjeLAyx+mtc257ysnsmDtNr5950ymXH46ew3o02l+1z4yn+snLmz/fsDlD/OBMfvw+48dzUdveIEpizdkXN/Rlz3EJ98+ip998AiALvsxmcvvnc2/X3qTJdeew8E/eISjRw3ipcUbUo4PcMm/p/PgrFVJj9/7Zqzga/+ZkXLay+6elXT4lLhlnhwej1HEji2AC8eN5PYpy/jNR47iB/+bzZH7DuKOL5/AUVc+zug9d2tPB166/HSGDejT5dj64jv358ZnF7ev15+ffoNfPfZae7qReOxs3tHMUVc9zpXvP4zPvGN05JjTicX0xtVn85YfPMKnT9iPf76wlJ9+4DA+dUJhlpHO1Q+/mtX4x139BH16dtzLX7OlkWEJx3ahjL7sIZ761rs4YGj/9mGxcyMm/pg88orH2H9of+77yontscWnmTG/u2AMHzx6XwCWrt/Ou371DNd/8ljOOrxrWjX6sof4xPGjuPq8I9q/x9KI6y44ivOOHpE09uN//gSD+vbisW8E6W/89f+GSYt4cv5anvjmu/jR/+Zw64tLM14bRl/2UPs1EIJ81NDde3caZ+WmRk76xdP07G40t3qX7QPw5vodnPyrp/nrJ47h7COGtw/f0tjMkVc8njaGbMTivOZDR3DhuFF5zyufa2cy5XgqrtpvppSlBs/MzjKz18zsDTO7rBwx5KtXj240tbZ1GX7n1OXtn1PdFX10zur2zw/PXp10nFkrNmUVz03PLWb60o0APDRrJdD1Qd1YhjqKWOEOYFHDNh4IM+gzlneOK1a4A5i0oKHLfB6aHU63rGO6N9ZuY+Xmxi7j3hFuu78miXPFpp0pY0088Rc3bAfgH88vaR929/Rg3m+s2ZZyPjG3TwkKLbHEHWDtlkZ2tbQCQSEpVy/EzTOZvz+/GAgSllim9fF5a5JmYOeu3ALA/15ZkXRe23a1dBl224tvAkEmF2gv3AH87bnFrNi0k0XrtmdaDYAuhTuA5Ru77qdY4Q469kP8sRjL1AFs2N61Vjx+PW6evCRpLNnUlt8bt71i2yHRAzNXRp5fKosTtmPsHJi8MNiXT7y6BoD7w2U1bN3VaX/ELFjbMSx2jk9ZvIGmlo7056bnguOmrc2Zt6rjuHjm9a7nZGNza/vn8c8uAmDOymAf/G9G8mMJ4IVFwbH7ZBh3Ki1x+yIWVzaefi2IOVl6ErNpZ0f6lOzcgI5j8c5pyxOG7wDg3y8F50JrGO/E1xu4Oxz3jbVd04kbw20V774Zwb6LZWCjrG/sHIxNF78fk4nFCdDU2paxcAedz7lE96ZIL2L+83LX8xrgmdfWtn9em+K8SSaWTkFH2nrPK8tpbG5jypJgXTbvbO6UDryW5DwAuPHZjuMc4J8vLAFgY9iaJna8x46dhm1BnLeE4xVSq8diWBouY2nKcdN12hC5k5XooXXSsHUXyzZ0pMuvr0m+bQtlWphGxUxJc7xuaWxhZlzeIDHNjLkj7lozLzye7n1ledJxAf4Vd85ARxpxx8upp1mzZRevxW2byQnX6liacOuLqfdzOgsbOtKU2PEQm2escNf+e9znmWGeK/GcXr8teQuyZLIpp9yW4/olU62dlVRn1F2VvIBnZt2BPwNnA4cCF5pZdrd4K0Cv7t1oTlLA69m9Y5OmKv3Hj5NKpot+uvkmJhaZ4smkudXpFZt3mriSxdyzu6X8rdji909s2yQrlEebl9M9fLgy1fbNNqZ8xbZtNvPMZZpsZJpvLr/3inK+ZLUNOuaX6/GQ7XLidZxL0Y6j+Plk3H5tbXHpQFvSGHokmV/7+ZEmptg4u4p8LveKcIzGjuNcdKQFnde1ubWNnj3CdUyatpf3sl+oXjujXH8KO13X7ZZpXqn2fez59qaE4zZ2LnUcx8HvveLOhUJL7KW6WGlqoRU7znyuj6mOi2TX8lyW01rAx2ayfQQneX4xc5oSizmW/8hm2lwU6vgo5LaW3JSjBm8c8Ia7L3L3JuA/wAfKEEdeevXolrTQ0qtHxyZN9R68+HFSyeUki8230IWpptbW9gtlugxxst9698ivYJWL2FaPX2bvPLdNU0tb+wU9n3XJtPxsEu3Y/s4mw92rR/esp8lGpvXLtNxk03eLkEpls0/iC4zFvPHQO8V53n6etrYm/b3L+BEKpPHnfvxxkSyG+COsPSMc4TyNjVPsDGKUdKxnlIMihY60oPP2b2ppS3sjK8qNhmLKJ+McL8r1p9jTZSrgpdr3icdp4rmUeL0p1jUxmXLcxMxFseNMPK+ykSrNjI85n33a0la4dc82H5Apv5hKrKDUI6GAl+v5mEmhjo9qOR9qmZX6XT5mdj5wlrt/Ifz+KeB4d78k1TRjx471qVOnlirESL72n1e4b8bKTm3bARqbOx/Uib+nGidxWKppE+eRbtpkw5PNP368ZMPSxZVpfdPNO9O2y7TsKNOlW59080q2/Xr36NZeQEm3bzLFFmW/ppJq20cZnuy3VMvLdjunmkcux2bist07FwxT7ZuorUGyOUej7ucoy4nNL9M+iJKmJMYX+x5/jCZbNmTenqnWOcrxlm65UUWJJXEdMomfT3Ort2easjkH0o0XJeb4eWRKC5NNk2rfZnv8ZlrfQu/nKNNlm07Ezvd051Kfnt06HSfJ1iWX8zvd/si0Dbp3s/abeIW6NsSnfcnWK9vl5CJdGhblt2zyHZnOtUzzzLSPMuUZ4vd/smtOpmMy1byTTZNYkRAfe7I0MJu8WTZxp5Nq3HTXomzFL8OsuM/GxS/rlEOGcvPnxhVvYTkys2nuPjbTeOXoZCVZNqzL7jKzi4GLAUaNGlXsmLL2xXcewN5JHlTe0dTK/2aswB3OP3ZE0jtSza3e/qzVKYcM5ZBhu/PQ7FUs37iTdx08lGlLN3LhuJHt79NL5vU1W1m9ZRcnHzSEx+et4W3Dd2fEHrvx35eX8b6jhtOvVw+27mrhgRkr2bqrhT49u3H624YxtH9vbp68hP323I2zws4UGptbueeVFVw4blT7znnlzU3saG5h6fodXDhuFE0tbdw1bXmXuNZu3cWLi9azZWczHz1uZJe73E2tbdzx8jI+fvyo9uleeXMTjnPMqD06jbtqcyP3z1zJOUcOZ83mRpZu2EFTSxubdzZzxtuGsWDt1vaY4znwnylvcvCw3Zm6dCNfOvkAHpi5kuMP2JO9woeadza3cm+4jss27OC11Vs589BhXeb11Py1jB7SjwOG9GNhw3bmrtxMY3MrHx07EoCH56zi6JF7MHxgtIfUH5u7miXrd9CvV1BzdsFxo9LW0jVs3cULi9az1+692b1PTzbuaGJI/9707tGNxeu2c9pb9+o0/h1Tl3HW4cMZ0KfjVH7ujXVs2tHMgL49OfmgIZ3G39LYzGNz1/CRY4MHzV9dvZXJb6yjpc05+/C92bSjmcaWVsaNHkyiOSs3s21XK73Dfbz3wD5MWtDA5p3N9O7RjT49u3PB2JHcMGkR+wzsw/uO2odJC9ax94DebNvVwstLguN6QJ+eNDa3cssLSxk1eDcOHNqPSQvW0b2b8bkUHSE8OGsV67fv4vS3DWPEoL68uHhD+7Mb3SzofCWq2LIH9+vVvh0SLd+4k7krN3fqvCYXd09fQd9e3di4vZlD9xnA0SMH4cDtL73Jh47Zlz49u7N8007mrNjM3gP60NrmHLvfHl3m8+8pb7K1sYUvnLQ/3bsZCxu2sWzDTk45JOhMqWHbLl5YuJ73H7UP0HFc9O/dnRufXcy+g/py7pEdD+g/NHsVa7Y0cvbhw9uP5TumLuPsI4aze5JOZ4Auccc8u2Bd+3N/h+87gIF9e/L8G8HzK2cfvjejBkfrLCqmzZ1/v/Rm0vQk3j2vrKBh6y7ef9Q+TJi3BsfZrVcPBvfrRWNzK3v2783OphZGDe7HgUP7dZn2lIOHMrhfLxas3cZT89fy2XeMps29PZ1IPEvXbWviuTcaGLvf4PZni885cjgjBvVlYcM2nnh1bcb1fXL+Wg4c2o/RYYdTCxu2taf7qaze0sjUJRs598jhTFmygT49urN7nx48Pm8N7z50GPsP6ddlmnTHb2NzK/dMX8HWXS3s1qs7u/XqzhlvG8bAvj2BjnR4zMhBHB/XmU6be/szcEeNHETvHt1wd7Y2tjBij74cGNexRqLYM1QnvmUIE19v4INj9mXuys306tGNo0YMYvqbGzGs/Zm8i08+ACPo3GLYgN6s2bKLIf17c/LBQ5j8xno+MCY4zjfvbGbCvDWcH57HyY6d+2as5B1v2ZOh/Ts6uJjw6hoOGbZ71scmwO1T3mRLYwuffcdoHpmzmiNHDGTqko2c+JYhDOnfK+k0G3c08fRrDXwo7CgEYNnGHcxftZWTDx7K3dOWc+HxXY+5eLH9tteA3ixs2M4JB+zJ8k07eO/hHef1onXbWbp+O6ce0nGdmLFsE61tzpL1O1i3bVf7ti2kCfPWcOBe/Zn8xjouHDeqU3PCWFr12pqtDOnfiw8f05HmTlu6kW7djKNHDmofdsOkRfTq3o1hA3vT1ga7Wlo5/a3DGLRbz/Zxkl33Yp6cv5YDhvRrPy+eea2BkYP7Mv3NTbznsGEM6NOzyzQQbKeWNmdsmP4ubNjOkvXbeWPtNrpZ0EnWcaMHs2ZLIy+H52MyT7+2FsNobmvjzLcN48n5a3lj7bZO23399iYmvd7AeUfvy13TlnPoPgOYvHA9I/foy3sO25v125t4dkFwnjjBc7jJ8pN/e24xRlCYSsxbOMGx2tLqfPDofZNuq3jTlm5k6tKNnH/sCPbs14sJ89a0P49/2lv34qn5azuNP3a/PWhsaeXEA4fw/MJ1DO7Xm0nhM7Cx6/+G7U1MfL2h/ZndXt27cfwBg9ufiRy6e+/25+B7de/o12LU4N1obXNWbNrJUSMG8vYD9mTjjiaemt/Ah4/Zl407mtr7bAAY0r83rW1tbNzR3J6ObY57ThuCTud2tbS2t4TYrVeQjrp3PFM8oE8PLhw3inXbmpi8cB3ffvchabdZpStHDd4JwBXu/p7w+/cB3P2aVNNUYg2eiIiIiIhIqUStwSvHQwUvAweZ2f5m1gv4GHB/GeIQERERERGpKSVvounuLWZ2CfAY0B34u7vPLXUcIiIiIiIitaYsLzp394eBh8uxbBERERERkVpV3n6fRUREREREpGBUwBMREREREakRJe9FMxdmthV4LcXPA4HNOc46n2mHAOtKvMxyTJtquijrX+hllmvaTOtaafEWY7rYNqiVfRp1ulzO82rZp1GnTbcNKjHeQk6X73Gf63Lzma7Q00Y9B2p5GyVug0qPt1DT5prPyWeZ+Uyr639hpyvUcZ/PtL6YXiYAAA5pSURBVOXevtmeA6WI9xB33z3jWO5e8X/A1DS/jc9jvvlMmzKmIi6z5NOmmi7K+hd6meWaNtO6Vlq8xZgutg1qZZ9GnS6X87xa9mnUaYuR/lbLNsr3uK+2bZRs2qjnQC1vo8RtUOnxFnD75pTPqaXjoZ6v/4U67ittn2YzbbbnQCnijRpTLTTRfKBM05ZjmeWYtl6Wmc+0ircyl5nPtIq3uNPWyzLzmVbxVuYy85m22uLNR71s32rbp4q3uNNWzHlaLU00p3qEl/qVUiXGVEr1tP71tK6p1Os2qNf1jlfP26Ce1z1G26B+t0G9rne8et4G9bzuMZW4DaLGVC01eOPLHUASlRhTKdXT+tfTuqZSr9ugXtc7Xj1vg3pe9xhtg/rdBvW63vHqeRvU87rHVOI2iBRTVdTgiYiIiIiISGbVUoMnIiIiIiIiGaiAl4aZbSt3DOViZq1mNiPub3SacU8xswdLF11hmZmb2a1x33uYWUM1r1MuzOy8cFu8tdyxlIL2e2f1nN5B5vU3s2fMrKKexSiEejvvkzGzH5jZXDObFV7vji93TKViZiPM7D4zW2BmC83s92bWK834Xzez3UoZY7GEx/1v4r5/28yuKGNIJROXx5trZjPN7JtmVpdlglq99tXlzpRIdrr7mLi/JeUOqIi2A4ebWd/w+5nAimxmYGY9Ch5V6V0IPAd8LJuJzKx7ccIpurz3u0gNyOm8rxVmdgJwLnCMux8JnAEsK29UpWFmBtwD/M/dDwIOBvoDV6eZ7OtATRTwgF3Ah8xsSLkDKYNYHu8wgmvfe4GflDkmKSAV8DIws/5m9qSZTTez2Wb2gXD4aDN71cxuDO+APB6XUaxJZtbdzH5lZi+Hdzq/FPfzADO718zmmdn1VXgn6BHgnPDzhcDtsR/MbJyZTTazV8L/h4TDP2tmd5rZA8DjpQ+5cMysP3AicBFhRi+smZ2UbL+a2TYzu8rMXgJOKF/kectlvz9rZmPixnvezI4sadRFklgbb2Z/MrPPhp+XmNmVcWlhzdX4pFv/WpTmvE91DLzXzOab2XNm9ocaqe0eDqxz910A7r7O3Vea2bFmNtHMppnZY2Y2HNprcn8XpglzzGxcWaPPz2lAo7v/A8DdW4FvAJ83s35m9uvwXJ9lZl81s0uBfYCnzezpMsZdKC0EHVZ8I/EHM9svzPvNCv+PMrOBYToYuw7uZmbLzKxnqQMvJHdfC1wMXGKBlHk9M/tueEzMNLNryxd1YdViXr/aMuHl0Aic5+7HAKcCvwnvegEcBPw5vAOyCfhwmWIshr7W0Tzz3nDYRcBmdz8OOA74opntH/42DvgWcARwIPChkkecn/8AHzOzPsCRwEtxv80HTnb3o4EfAz+P++0E4DPuflrJIi2ODwKPuvvrwAYzOyYcnmq/9gPmuPvx7v5cyaMtnFz2+9+AzwKY2cFAb3efVbKIy2tdmBb+Ffh2uYORvKU677sIz5EbgLPd/SRgaIliLLbHgZFm9rqZ/cXM3hVm2P8InO/uxwJ/p3OtVj93fwfw/8LfqtVhwLT4Ae6+BXgT+AKwP3B0WLP5L3f/A7ASONXdTy11sEXyZ+ATZjYwYfifgH/G1h34g7tvBmYC7wrHeR/wmLs3lyzaInH3RQRlgr1Ikdczs7MJ0ozj3f0o4JdlC7jwai6vrwJeZgb83MxmAU8A+wLDwt8Wu/uM8PM0YHTpwyua+Caa54XD3g182sxmEGSE9yQ48AGmuPui8A7g7cBJpQ85d2EGfTRBLc7DCT8PBO40sznAdQQXxZgJ7r6hJEEW14UEhR3C/xeGn1Pt11bg7tKGWHg57vc7gXPDTODngZtLEmxluCf8X2vpXb1Kdd4n81ZgkbsvDr/fnmbcquHu24BjCWowGoD/Al8CDgcmhNe7HwIj4ia7PZx2EkHrlUElDbpwDEjWlboBJwPXu3sLQI1c57oIC7T/BC5N+OkE4N/h51vpuPb9F7gg/Pyx8HutiBVoUuX1zgD+4e47oOaOiZrL69fCc0PF9gmCO5XHunuzmS0B+oS/7YobrxWoimrbPBjwVXd/rNNAs1PoepGoxvdv3A/8GjiFIEGL+SnwtLufZ0FnM8/E/ba9RLEVjZntSdBU53Azc6A7wf57mNT7tTEs9NWCrPa7u+8wswnAB4CPArXU8UYLnW/89Un4PZbmtVKb149M618z0pz395N8Gxg1KkzLngGeMbPZwFeAue6eqvl5LVzvAOaSUBthZgOAkcAiqne9svU7YDrwjzTjxLbF/cA1ZjaY4MbAU0WOrSTM7ACCdH0tqfN6Z1G7x0TN5fVVg5fZQGBtuMNPBfYrd0Bl9Bjwf7H25mZ2sJn1C38bF1bhdyO4u1WNzfb+Dlzl7rMThg+ko/ONz5Y0otI4n6Apyn7uPtrdRwKLCe5Y1sJ+zSSX/f434A/AyzV2F3MpcKiZ9Q6bLJ1e7oBKrJ7WP9V5D8m3wXzgAOvoUfkCaoCZHWJmB8UNGgO8Cgy1oAMWzKynmcW33LggHH4SQVO2zSULuLCeBHYzs09De4dZvyFolfA48GULOxALCzQAW4HdSx9q8YRp+B0ETRNjJtPR8dAnCK99YY3vFOD3wIO1cKPTzIYC1wN/8uDl2Knyeo8TPJ+5Wzh8cKp5VqGay+vX4h3YgggTtV0Eba8fMLOpwAyCi1y9+htB1fT0sG1yA0F7bIAXgGsJntWaBNybbAaVzN2XEyTaiX4J3GJm36RG7tYluJBg38W7G/g/amC/ZpLLfnf3aWa2hfR3fKtGLL1z92VmdgcwC1gAvFLeyEqjTtc/1Xn/cYLMbqdt4O47zez/AY+a2TqCTG4t6A/8MWxm2QK8QdBcczzwh7CQ24OglmduOM1GM5sMDCBopl2V3N3N7DzgL2b2I4Kb/g8DlxPUVBwMzDKzZuBGgufSxgOPmNmqGnoOD4KC7SVx3y8F/m5m3yHI63wu7rf/EjTVP6Vk0RVe37AJZk+C4/5W4Lfhb0nzeu7+qAUdjE01syY6jpWq9f/bu99Qvcs6juPvT0yqdQz/wEqHQog0x2BpYbZqRIkPwmpGkpBgpIOBD7SaIFmREUUU+SCKRIT5oP+6aPTAOUflHixxbs45LIYYRo0MJDaRhrJvD65LOh3u7Zydc5/d83feLzjc9/n9rvu6v79zxm/X5/yu+3cNeayfFtY1U5K1wH1V9Ua+Q5Y0b33q7eaqunbStZxpklxIm9K1qqqOT7icBVvq57ulfvxzlWSqql7ug74fAYeq6p5J13U6JfkD7by4Z9K1SFqYIZ/7naI5QpJNtA9Rf3XStUg6s/TpTI8Ddw0k3C3p891SP/5TtLH/1f8gbUrTvROuR5LmZejnfq/gSZIkSdJAeAVPkiRJkgbCgNcluSjJ79NWrD+Y5La+/bwkO5Ic6o/n9u2rkuxOcizJ5hl9fbH38UySn6ctECtJkiRpAsY81r+tj/MPJrl9EsdzMga8/3kN+HJVXQZcBdyaZDVwJ7Czqi6l3VL4zt7+Jdpdlr4/vZMkK/v291XVGtraQjcgSZIkaVLGNdZfA2wErgTWAtfOWG5l4gx4XVUdrqq9/flR2jo4K2mLGT/Qmz1AXxagql6sqieAV0d0t4x2C9plwHLgH4tcviRJkqQTGONY/zLgT1X1SlW9BvwRuO40HMKcGfBG6Au5Xk67U947quowtH8YwIqTvbaq/k5L+i8Ah2mLoD6ymPVKkiRJmpuFjPWBZ4D1Sc7vC79/HLho8ao9dQa8GZJM0RZ7vb2qjszj9efS/hLwLuBC4G1JbhxvlZIkSZJO1ULH+lX1LPBdYAfwMLCfNv3zjGHAmybJWbRf+E+ramvf/M8kF/T9FwAvztLN1cDzVfWvqnoV2AqsW6yaJUmSJM1uTGN9qur+qrqiqtbTPqt3aLFqng8DXpckwP3As1X1g2m7tgE39ec3Ab+dpasXgKuSLO99fow2x1eSJEnSBIxxrE+SFf3xYuDTtEXTzxgudN4l+RCwCzgAHO+bv0Kbm/sr4GJaeLu+ql5K8k5gD/D23v5lYHVVHUlyN/BZ2uXafcAtVXXsdB6PJEmSpGbMY/1dwPm0G7B8qap2ntaDmYUBT5IkSZIGwimakiRJkjQQBjxJkiRJGggDniRJkiQNhAFPkiRJkgbCgCdJkiRJA2HAkyQNVpJvJNl8kv0bkqyeQz//1y7JN5NcPa46JUkaFwOeJGkp2wDMGvBmtquqr1fVo4tWlSRJ82TAkyQNSpK7kvwlyaPAu/u2jUmeSLI/yUNJlidZB3wS+F6Sp5Jc0r8eTvJkkl1JVp2g3ZYkn+l9/zXJt5PsTrInyRVJtid5LsmmaXXd0Wt4OsndE/jRSJKWgGWTLkCSpHFJ8l7gBuBy2v9xe4Enga1VdV9v8y3g5qr6YZJtwO+q6sG+byewqaoOJXk/8OOq+uiIdjPf+m9V9YEk9wBbgA8CbwEOAj9Jcg1wKXAlEGBbkvVV9dii/TAkSUuSAU+SNCQfBn5TVa8A9GAGsKYHu3OAKWD7zBcmmQLWAb+eFuDePMf3ff19DgBTVXUUOJrkP0nOAa7pX/t6uyla4DPgSZLGyoAnSRqaGrFtC7ChqvYn+TzwkRFt3gT8u6reM4/3PNYfj097/vr3y2hX7b5TVffOo29JkubMz+BJkobkMeC6JG9Ncjbwib79bOBwkrOAz01rf7Tvo6qOAM8nuR4gzdqZ7eZpO/CFfpWQJCuTrFhAf5IkjWTAkyQNRlXtBX4JPAU8BOzqu74GPA7sAP487SW/AO5Isi/JJbTwd3OS/bTPz33qBO1Ota5HgJ8Bu5McAB5kYYFRkqSRUjVqJoskSZIk6Y3GK3iSJEmSNBAGPEmSJEkaCAOeJEmSJA2EAU+SJEmSBsKAJ0mSJEkDYcCTJEmSpIEw4EmSJEnSQBjwJEmSJGkg/gsQe6YXO+5j6gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1080x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "logs_2018['2018'].assign(\n",
    "    failures=lambda x: 1 - x.success\n",
    ").query('failures > 0').resample('1min').agg(\n",
    "    {'username':'nunique', 'failures': 'sum'}\n",
    ").dropna().rename(\n",
    "    columns={'username':'usernames_with_failures'}\n",
    ").usernames_with_failures.plot(\n",
    "    title='usernames with failures per minute in 2018',\n",
    "    figsize=(15, 3)\n",
    ").set_ylabel('usernames with failures')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
